import DoublyLinkedList from './doublyLinkedList.js'

export default class StackLinkedList {
  constructor() {
    // 这里用双向链表原因：
    // 可以直接获取头尾元素，减少过程消耗
    // 它的时间复杂度与原始的 Stack 相同，为 O(1)
    this.items = new DoublyLinkedList()
  }

  push(element) {
    this.items.push(element)
  }

  pop() {
    if (this.isEmpty()) {
      return undefined
    }
    return this.items.removeAt(this.size() - 1)
  }

  peek() {
    if (this.isEmpty()) {
      return undefined
    }
    return this.items.getElementAt(this.size() - 1).element
  }

  isEmpty() {
    return this.items.isEmpty()
  }

  size() {
    return this.items.size()
  }

  clear() {
    this.items.clear()
  }

  toString() {
    return this.items.toString()
  }
}
